package arithmetic.my3_20;

import jdk.nashorn.internal.parser.JSONParser;
import org.codehaus.groovy.ant.Groovy;
import org.codehaus.groovy.runtime.DefaultGroovyMethods;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * ��̬�滮 �� n ��ѧ��վ��һ�ţ�ÿ��ѧ����һ������ֵ��ţţ����� n ��ѧ���а���˳��ѡȡ k ��ѧ���� Ҫ����������ѧ����λ�ñ�ŵĲ���� d��ʹ���� k ��ѧ��������ֵ�ĳ˻�������ܷ������ĳ˻��� ÿ��������� 1 ������������ÿ���������ݵĵ�һ�а���һ������ n (1 <= n <= 50)����ʾѧ���ĸ�������������һ�У����� n �������� ��˳���ʾÿ��ѧ��������ֵ ai��-50 <= ai <= 50������������һ�а�������������k �� d (1 <= k <= 10, 1 <= d <= 50)�� ʵ���� ����: 3 7 4 7 2 50 ����� 49
 */
// ˼·���ҵ����� n����k�������ٿ������ĸ������ҵ�ʹ������˫�� ����Ӧ���ö�̬�滮�ķ�ʽ���
//  ���Ǽ������һ��iʱ�� ֵ
public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            int value[] = new int[n];
            // ������
            final long MAX = Long.MAX_VALUE;
            long result = -MAX;
            for (int i = 0; i < n; i++) {
                value[i] = sc.nextInt();
            }

            int k = sc.nextInt();
            int d = sc.nextInt();
            // dp_max[i,j] ��ʾi��ѡj�����˻������ֵ
            // ��Ϊ�����и�����������������Ҫά������dp���飬һ���洢���һ���洢��С��
            long[][] dp_max = new long[n][k + 1];
            long[][] dp_min = new long[n][k + 1];
            // ��ʼ��
            for (int i = 0; i < n; i++) {
                // ��0�ε���Ĭ��Ϊ��Ϊ�Լ���ֵ
                dp_max[i][0] = value[i];
                dp_min[i][0] = value[i];
                for (int j = 1; j <= k; j++) {
                    dp_max[i][j] = -MAX;
                    dp_min[i][j] = MAX;
                }
            }

            long mmx = -MAX; // mmx��Ҫ�����ڵ�k=1ʱѡ������������Ԫ��
            // ��k=1 ʱ����Դ�
            for (int i = 0; i < n; i++) {
                mmx = Math.max(mmx, value[i]);
                result = Math.max(result, mmx);
            }

            for (int i = 0; i < n; i++) {
                for (int j = 1; j <= k; j++) { //
                    // �ֱ��ʾ�Ե�i����Ϊ��β(��i�ض�ѡ��ʱ)��ѡ��j���˵����˻�����С�˻�
                    // jΪ0ʱ����Ϊ1��jΪ1ʱ��Ϊ�Լ��������ƺ��е����⣬�����ǳ�ʼ�������⣬����ֵ��Ӧ��Ϊ1��
                    // �������jΪ1 ʱ ֵ���������Ѿ���ʼ�Լ����Լ��ˣ���϶����С�int r = i�ĳ�int r = i-1
                    // mx[r][j-1]��ʾ��ǰr����ѡ��j-1�����ĳ˻�������r>=j-1;rֻ��������d�����߻��ݵ���  ��r>=j-1��
                    for (int r = i - 1; r >= Math.max(0, i - d) && r >= j - 1; r--) {
                        if (value[i] > 0) {
                            dp_max[i][j] = Math.max(dp_max[i][j], dp_max[r][j - 1] * value[i]);
                            dp_min[i][j] = Math.min(dp_min[i][j], dp_min[r][j - 1] * value[i]);
                        } else {
                            dp_max[i][j] = Math.max(dp_max[i][j], dp_min[r][j - 1] * value[i]);
                            dp_min[i][j] = Math.min(dp_min[i][j], dp_max[r][j - 1] * value[i]);
                        }
//                        dp_max[i][j] = Math.max(dp_max[i][j], Math.max(dp_max[i][j], dp_max[r][j - 1] * value[i]));
//                        dp_min[i][j] = Math.min(dp_min[i][j], Math.min(dp_min[i][j], dp_max[r][j - 1] * value[i]));
                    }
                }
            }
            // �ֻ���k�κ� ,ȡ���ֵ  dp_max[i][k-1]��ʾ�� i������ѡk��ֵʱ
            for (int i = k; i < n; i++) {
                result = Math.max(result, dp_max[i][k - 1]);
            }
            // �ж��Ƿ������� object.isArray(), groovy �ṩ��json����ǳ����ã����л���ͺô�ӡ��
            System.out.println(groovy.json.JsonOutput.toJson(dp_max));
            System.out.println(groovy.json.JsonOutput.toJson(dp_min));
            System.out.println(result);
        }
    }
}

/*
�������ݣ�
5
2 4 -4 -4 -4
3 5


36
7 -15 31 49 -44 35 44 -47 -23 15 -11 10 -21 10 -13 0 -20 -36 22 -13 -39 -39 -31 -13 -27 -43 -6 40 5 -47 35 -8 24 -31 -24 -1
3 31
108241
���� 117649
* */